package database

import (
	"fmt"
	adminModels "go-mgdms/internal/admin/models"
	"go-mgdms/internal/common/config"
	"go-mgdms/internal/common/utils"
	"time"

	"gorm.io/gorm"
)

func InitAdminData(db *gorm.DB) error {
	// 检查admin表是否已有数据
	var count int64
	result := db.Model(&adminModels.AdminModel{}).Count(&count)
	if result.Error != nil {
		return fmt.Errorf("检查管理员数据失败: %w", result.Error)
	}

	// 如果已有数据，则跳过初始化
	if count > 0 {
		fmt.Println("管理员数据已存在，跳过初始化")
		return nil
	}

	// 从配置获取默认管理员信息
	username, err := config.GetString("app.admin.username")
	if err != nil || username == "" {
		username = "admin" // 默认用户名
	}

	password, err := config.GetString("app.admin.password")
	if err != nil || password == "" {
		password = "admin123" // 默认密码
	}

	// 加密密码
	hashedPassword, err := utils.HashPassword(password)
	if err != nil {
		return fmt.Errorf("密码加密失败: %w", err)
	}

	// 获取当前时间戳
	now := uint64(time.Now().Unix())

	// 创建管理员记录
	admin := &adminModels.AdminModel{
		Username:   username,
		Nickname:   "系统管理员",
		Avatar:     "",
		Password:   hashedPassword,
		Status:     "enable", // 启用状态
		CreateTime: &now,
		UpdateTime: &now,
	}

	// 保存到数据库
	if err := db.Create(admin).Error; err != nil {
		return fmt.Errorf("创建管理员账号失败: %w", err)
	}

	fmt.Printf("已成功创建管理员账号: %s\n", username)
	return nil
}
